﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;

namespace GesPro
{
    public partial class RapportEmploye : Form
    {
        private string nomEmploye;

        private int anneeDebut;
        private int anneeFin;
        private int semaineDebut;
        private int semaineFin;

        public enum Options
        {
            Hebdo, periode, complet
        }

        private Options type;
        private bool hebdo;
        private bool periode;
        private bool complet;

        private bool detail;

        private bool agenerer;


        public Options Type
        {
            get
            {
                return type;
            }
            set
            {
                type = value;
            }
        }

        /// <summary>
        /// Année de début de période.
        /// </summary>
        public int AnneeDebut
        {
            get
            {
                return anneeDebut;
            }
            set
            {
                anneeDebut = value;
            }
        }
        /// <summary>
        /// Année de fin de période.
        /// </summary>
        public int AnneeFin
        {
            get
            {
                return anneeFin;
            }
            set
            {
                anneeFin = value;
            }
        }
        /// <summary>
        /// Semaine de début de période.
        /// </summary>
        public int SemaineDebut
        {
            get
            {
                return semaineDebut;
            }
            set
            {
                semaineDebut = value;
            }
        }
        /// <summary>
        /// Semaine de fin de période.
        /// </summary>
        public int SemaineFin
        {
            get
            {
                return semaineFin;
            }
            set
            {
                semaineFin = value;
            }
        }
        /// <summary>
        /// Si vrai, le rapport doit couvrir toutes les périodes.
        /// </summary>
        public bool Complet
        {
            get
            {
                return complet;
            }
            set
            {
                complet = value;
            }
        }
        /// <summary>
        /// Si vrai, le rapport doit être détaillé.
        /// </summary>
        public bool Detail
        {
            get
            {
                return detail;
            }
            set
            {
                detail = value;
            }
        }
        /// <summary>
        /// Si vrai, le rapport est de type hebdomadaire.
        /// </summary>
        public bool Hebdo
        {
            get
            {
                return hebdo;
            }
            set
            {
                hebdo = value;
            }
        }
        /// <summary>
        /// Si vrai, le rapport couvre une période de temps défini.
        /// </summary>
        public bool Periode
        {
            get
            {
                return periode;
            }
            set
            {
                periode = value;
            }
        }
        /// <summary>
        /// Si vrai, indique qu'un rapport doit être généré.
        /// </summary>
        public bool Agenerer
        {
            get
            {
                return agenerer;
            }
            set
            {
                agenerer = value;
            }
        }

        /// <summary>
        /// Nom de l'employé visé par le rapport.
        /// </summary>
        public string NomEmploye
        {
            get
            {
                return nomEmploye;
            }
            set
            {
                nomEmploye = value;
            }
        }

        public RapportEmploye(List<string> listeEmploye)
        {
            InitializeComponent();
            rbHebdo.Checked = true;
            agenerer = false;
            checkbDetails.Checked = false;
            if (listeEmploye.Count > 0)
            {
                foreach (string nomEmploye in listeEmploye)
                {
                    cbEmploye.Items.Add(nomEmploye);
                }
                cbEmploye.SelectedIndex = 0;
            }
        }


        /// <summary>
        /// Bouton annuler. Ferme la fenêtre.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void B_AnnulerConnexion_Click(object sender, EventArgs e)
        {
            this.Close();
            agenerer = false;
        }

        private void rbHebdo_CheckedChanged(object sender, EventArgs e)
        {
            ChangerOption(Options.Hebdo);
        }

        private void rbPeriode_CheckedChanged(object sender, EventArgs e)
        {
            ChangerOption(Options.periode);
        }

        private void rdComplet_CheckedChanged(object sender, EventArgs e)
        {
            ChangerOption(Options.complet);

        }
        /// <summary>
        /// Ajuster les options interne suite à un changement de la part d'un utilisateur.
        /// </summary>
        /// <param name="options">Type de l'option sélectionné</param>
        private void ChangerOption(Options options)
        {
            switch (options)
            {
                case Options.Hebdo:
                    tpSemaine.Enabled = true;
                    tpSemaineDebut.Enabled = false;
                    tpSemaineFin.Enabled = false;
                    type = Options.Hebdo;
                    break;
                case Options.periode:
                    tpSemaine.Enabled = false;
                    tpSemaineDebut.Enabled = true;
                    tpSemaineFin.Enabled = true;
                    type = Options.periode;
                    break;
                case Options.complet:
                    tpSemaine.Enabled = false;
                    tpSemaineDebut.Enabled = false;
                    tpSemaineFin.Enabled = false;
                    type = Options.complet;
                    break;
                default:
                    break;
            }
        }


        /// <summary>
        /// Bouton générer. Prépare et indique le besoin de générer un rapport puis ferme la fenêtre.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void B_Generer_Click(object sender, EventArgs e)
        {
            CultureInfo calendrier = CultureInfo.CurrentCulture;

            nomEmploye = cbEmploye.Text;
            switch (type)
            {
                case Options.Hebdo:
                    semaineDebut = calendrier.Calendar.GetWeekOfYear(tpSemaine.Value, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Sunday);
                    anneeDebut = tpSemaine.Value.Year;
                    break;
                case Options.periode:
                    semaineDebut = calendrier.Calendar.GetWeekOfYear(tpSemaineDebut.Value, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Sunday);
                    semaineFin = calendrier.Calendar.GetWeekOfYear(tpSemaineFin.Value, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Sunday);
                    anneeDebut = tpSemaineDebut.Value.Year;
                    anneeFin = tpSemaineFin.Value.Year;
                    break;
                default:
                    break;
            }
            if (checkbDetails.Checked)
            {
                detail = true;
            }
            agenerer = true;
            this.Close();
        
        }

        private void labHebdo_Click(object sender, EventArgs e)
        {
            rbHebdo.Checked = true;
        }

        private void labPeriode_Click(object sender, EventArgs e)
        {
            rbPeriode.Checked = true;
        }

        private void labComplet_Click(object sender, EventArgs e)
        {
            rbComplet.Checked = true;
        }

        private void labDetail_Click(object sender, EventArgs e)
        {
            checkbDetails.Checked = !checkbDetails.Checked; 
        }



    }
}
